package com.example.graphmovieapp.domain.dto;

import java.util.List;
import java.util.Objects;

/**
 * PersonDTO类，用于API数据传输
 * 
 * @author GraphMovieApp
 * @version 1.0
 */
public class PersonDTO {
    
    /**
     * 人物ID
     */
    private Long id;
    
    /**
     * 人物姓名
     */
    private String name;
    
    /**
     * 出生年份
     */
    private Integer born;
    
    /**
     * 参演的电影ID列表
     */
    private List<Long> actedInMovieIds;
    
    /**
     * 执导的电影ID列表
     */
    private List<Long> directedMovieIds;
    
    /**
     * 默认构造函数
     */
    public PersonDTO() {
    }
    
    /**
     * 带参数的构造函数
     * 
     * @param id 人物ID
     * @param name 人物姓名
     * @param born 出生年份
     */
    public PersonDTO(Long id, String name, Integer born) {
        this.id = id;
        this.name = name;
        this.born = born;
    }
    
    /**
     * 获取人物ID
     * 
     * @return 人物ID
     */
    public Long getId() {
        return id;
    }
    
    /**
     * 设置人物ID
     * 
     * @param id 人物ID
     */
    public void setId(Long id) {
        this.id = id;
    }
    
    /**
     * 获取人物姓名
     * 
     * @return 人物姓名
     */
    public String getName() {
        return name;
    }
    
    /**
     * 设置人物姓名
     * 
     * @param name 人物姓名
     */
    public void setName(String name) {
        this.name = name;
    }
    
    /**
     * 获取出生年份
     * 
     * @return 出生年份
     */
    public Integer getBorn() {
        return born;
    }
    
    /**
     * 设置出生年份
     * 
     * @param born 出生年份
     */
    public void setBorn(Integer born) {
        this.born = born;
    }
    
    /**
     * 获取参演的电影ID列表
     * 
     * @return 参演的电影ID列表
     */
    public List<Long> getActedInMovieIds() {
        return actedInMovieIds;
    }
    
    /**
     * 设置参演的电影ID列表
     * 
     * @param actedInMovieIds 参演的电影ID列表
     */
    public void setActedInMovieIds(List<Long> actedInMovieIds) {
        this.actedInMovieIds = actedInMovieIds;
    }
    
    /**
     * 获取执导的电影ID列表
     * 
     * @return 执导的电影ID列表
     */
    public List<Long> getDirectedMovieIds() {
        return directedMovieIds;
    }
    
    /**
     * 设置执导的电影ID列表
     * 
     * @param directedMovieIds 执导的电影ID列表
     */
    public void setDirectedMovieIds(List<Long> directedMovieIds) {
        this.directedMovieIds = directedMovieIds;
    }
    
    /**
     * 重写equals方法
     * 
     * @param o 比较对象
     * @return 是否相等
     */
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        PersonDTO personDTO = (PersonDTO) o;
        return Objects.equals(id, personDTO.id) && 
               Objects.equals(name, personDTO.name) && 
               Objects.equals(born, personDTO.born);
    }
    
    /**
     * 重写hashCode方法
     * 
     * @return 哈希值
     */
    @Override
    public int hashCode() {
        return Objects.hash(id, name, born);
    }
    
    /**
     * 重写toString方法
     * 
     * @return 字符串表示
     */
    @Override
    public String toString() {
        return "PersonDTO{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", born=" + born +
                '}';
    }
}